﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GIFT
{
    public partial class VentanaFechaHora : Form
    {
        //Constructor de la clase
        public VentanaFechaHora(String nombre, InterfazPrincipal vPrincipal)
        {
            controlFechaHora = new ControlFechaHora();
            modificado = false;
            Principal = vPrincipal;
            Nombre = nombre; //pone el nombre
            InitializeComponent();
            this.Name = Nombre;
            this.Text = Nombre;
            campoNombreFecha.Text = Nombre;
            campoActualizacionFecha.Text = DateTime.Now.ToString();
        }

        private void campoDespliegueFecha_SelectedIndexChanged(object sender, EventArgs e)
        {
            escogeFecha.CustomFormat = campoDespliegueFecha.Text;
            escogeFecha.Format = DateTimePickerFormat.Custom;
        }

        //metodos set
        //Le asigna valor al campo correlativo
        public void setCorrelativo(String correlativo)
        {
            campoCorrelativoFecha.Text = correlativo;
        }

        //Le asigna valor al campo nombre
        public void setNombre(String nombre)
        {
            campoNombreFecha.Text = nombre;
        }

        //Le asigna valor al campo descripcion
        public void setDescripcion(String descripcion)
        {
            campoDescripcionFecha.Text = descripcion;
        }

        //Le asigna valor al campo fecha actualizacion
        public void setActualizacion(String fechaActualizacion)
        {
            campoActualizacionFecha.Text = fechaActualizacion;
        }

        //Le asigna el valor formato de despliegue
        public void setDespliegueFecha(String valor)//CAMBIAR
        {
            if (valor != "")
            {
                int formato = int.Parse(valor);
                switch (formato)
                {
                    case (100)://"MM dd yyyy hh:mmAM";
                        campoDespliegueFecha.SelectedIndex = 0;
                        //escogeFecha.CustomFormat = "MM dd yyyy hh:mm";
                        //escogeFecha.Format = DateTimePickerFormat.Custom;
                        break;
                    case (109)://"MM dd yyyy hh:mm:ss:mmmAM";
                        campoDespliegueFecha.SelectedIndex = 1;
                        break;
                    case (113)://"MM yyyy hh:mm:ss:mmm(24h)";
                        campoDespliegueFecha.SelectedIndex = 2;
                        break;
                    case (120)://"yyyy-MM-dd hh:mm:ss(24h)";
                        campoDespliegueFecha.SelectedIndex = 3;
                        break;
                    case (121)://"yyyy-MM-dd hh:mm:ss.mmm(24h)";
                        campoDespliegueFecha.SelectedIndex = 4;
                        break;
                    case (126)://"yyyy-MM-dd hh:mm:ss:mmm(no spaces)";
                        campoDespliegueFecha.SelectedIndex = 5;
                        break;
                }
            }
        }

        //Le asigna el valor al valor fecha defecto
        public void setFechaDefecto(String valor)
        {
            if (valor != "")
            {
                escogeFecha.CustomFormat = campoDespliegueFecha.ToString();
                escogeFecha.Format = DateTimePickerFormat.Custom;
                escogeFecha.Text = valor;
            }
        }
        //Le asigna el valor al preaviso
        public void setPreaviso(String valor)
        {
            campoPreavisoFecha.Text = valor;
        }

        //Le asigna valor al campo defecto
        public void setVencimiento(String valor)
        {
            campoVencimientoFecha.SelectedIndex = ((valor == "TRUE" || valor == "True") ? 0 : 1);
        }

        //Metodos Get      

        //Retorna el  valor al campo correlativo
        public String getCorrelativo()
        {
            return campoCorrelativoFecha.Text;
        }

        //Retorna el  valor al campo nombre
        public String getNombre()
        {
            return Nombre;
        }

        //Retorna el  valor al campo descripcion
        public String getDescripcion()
        {
            return campoDescripcionFecha.Text;
        }

        //retorna la fecha de actualizacion
        public String getActualizacion()
        {
            return campoActualizacionFecha.Text;
        }

        //Retorna el valor del formato de despliegue
        //poner el numero del formato de despliegue correspondiente al formato establecido
        public String getDespliegueFecha()
        {
            String retorno = "";
            switch (campoDespliegueFecha.Text)
            {
                case ("mm dd yyyy hh:mm"):
                    retorno = "" + 100;
                    break;
                case ("MM dd yyyy hh:mm:ss:mmm"):
                    retorno = "" + 109;
                    break;
                case ("MM yyyy hh:mm:ss:mmm"):
                    retorno = "" + 113;
                    break;
                case ("yyyy-MM-dd hh:mm:ss"):
                    retorno = "" + 120;
                    break;
                case ("yyyy-MM-dd hh:mm:ss.mmm"):
                    retorno = "" + 121;
                    break;
                case ("yyyy-MM-dd hh:mm:ss:mmm"):
                    retorno = "" + 126;
                    break;
            }
            return retorno;
        }

        //Retorna el valor fecha
        public String getFechaDefecto()
        {
            // MessageBox.Show(escogeFecha.Text,"de get");
            return escogeFecha.Text;
        }

        //Retorna el valor de los dias de preaviso
        public String getPreaviso()
        {
            return campoPreavisoFecha.Text;
        }

        //Retorna valor de la fecha de vencimiento
        public String getVencimiento()
        {
            return (campoVencimientoFecha.Text == "Si" ? "TRUE" : "FALSE");
        }

        //Cambia la habilitacion del boton guardar
        public void habilitacionBotonGuardar(bool habilitacion)
        {
            botonGuardarFecha.Enabled = habilitacion;
        }

        //Captura el click en el boton cerrar de una pestana
        private void botonCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //Captura el click en el boton borrar de una pestana
        private void botonEliminar_Click(object sender, EventArgs e)
        {
            borrarArchivo();
        }

        //Captura el click en el boton guardar de una pestana
        private void botonGuardar_Click(object sender, EventArgs e)
        {
            guardarArchivo();//manda a guardar el archivo
        }

        //Captura el click en el boton guardarComo de una pestana
        private void botonGuardarComo_Click(object sender, EventArgs e)
        {
            hacerCopia();
        }

        //Se da cuenta cuando se hicieron cambios
        private void seHicieronCambios(object sender, EventArgs e)
        {
            if (Principal.estaAbierta(Nombre))
            {
                this.modificado = true;
                botonGuardarFecha.Enabled = true;
            }
        }

        //Se da cuenta cuando se hicieron cambios
        public void seHicieronCambios(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            this.modificado = true;
            botonGuardarFecha.Enabled = true;
        }

        //Captura el evento que suceda antes de cerrar la ventana
        private void click_cerrarVentana(object sender, FormClosingEventArgs e)
        {
            if (modificado)
            {
                guardarArchivo();
            }
            Principal.ventanaEnfocada(null, ""); //Manda a quitarse como la enfocada
        }

        //Manda a guardar un archivo
        public void guardarArchivo()
        {
            //confirma el guardado
            DialogResult dr = MessageBox.Show("Desea guardar los cambios de " + Nombre + "?", "Guardar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            switch (dr)
            {
                case DialogResult.Yes: //en caso de que desee guardar
                    if (controlFechaHora.existe(Nombre))//Si nada mas se desean guardar los cambios
                    {
                        controlFechaHora.modificar(getNombre(), getDescripcion(),getDespliegueFecha(),getFechaDefecto(),getVencimiento(),getPreaviso());
                    }
                    else //Si no se habia guardado antes en la base de datos
                    {
                        controlFechaHora.crearNuevo(getNombre(), getDescripcion(), getDespliegueFecha(), getFechaDefecto(), getVencimiento(), getPreaviso());
                        TreeNode tnode = new TreeNode(Nombre);
                        tnode.ContextMenuStrip = Principal.ClickDerechoArbolPrincipalNodoSecundario;
                        Principal.GetTreeView().Nodes[0].Nodes[0].Nodes[4].Nodes.Add(tnode); //Agrega el nodo
                    }
                    Principal.habilitacionCampos();
                    this.modificado = false;
                    this.botonGuardarFecha.Enabled = false;
                    break;
                case DialogResult.No: break;
            }
        }

        //Manda a hacer una copia del numero
        public void hacerCopia()
        {
            GuardarComo guardar = new GuardarComo(Principal, "fechaHora", this);
            guardar.Show();
        }

        //Manda a borrar el archivo
        public void borrarArchivo()
        {
            //confirma el borrado
            DialogResult dr = MessageBox.Show("Está seguro que desea borrar la fecha hora?", "Borrar fecha hora", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            switch (dr)
            {
                case DialogResult.Yes: //en caso de que desee borrarlo
                    controlFechaHora.borrar(Nombre);
                    Principal.habilitacionCampos();
                    Principal.GetControlInterfaz().quitarNodo(Principal.GetTreeView(), Nombre, "fechaHora");
                    this.Close();
                    break;
                case DialogResult.No: break;
            }
        }

        //Captura el evento de cuando la ventana es enfocada
        private void VentanaEnfocada(object sender, EventArgs e)
        {
            Principal.ventanaEnfocada(this, "fechaHora"); //Manda a ponerse como la enfocada
        }

        //Captura el evento de cuando la ventana es desenfocada
        private void VentanaDesenfocada(object sender, EventArgs e)
        {
            Principal.ventanaEnfocada(null, ""); //Manda a quitarse como la enfocada
        }


    }//Fin de la clase
}
